From: Jan Beulich Date: Thu, 2 May 2013 14:48:22 +0000 (+0200) Subject: x86/HVM: fix legacy PIC check in pt_update_irq() X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~6924 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f6b533308cd8a776bbb947f6084efc63218ad28b;p=xen.git x86/HVM: fix legacy PIC check in pt_update_irq() Depending on the IRQ we need to - not look at the PIC at all is this is the LAPIC timer (in that case we're dealing with a vector number rather than an IRQ one), - not look at the PIC for any non-legacy interrupt, - look at the correct PIC for the IRQ (which will always be PIC 2 for the RTC, and possibly also for HPET). Signed-off-by: Jan Beulich Tested-by: Roger Pau Monné (FreeBSD guest) Reviewed-by: Tim Deegan --- diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 46d3ec6c97..3fb040654f 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -272,8 +272,9 @@ int pt_update_irq(struct vcpu *v) * IRR is returned and used to set eoi_exit_bitmap for virtual * interrupt delivery case. Otherwise return -1 to do nothing. */ - if ( vlapic_accept_pic_intr(v) && - (&v->domain->arch.hvm_domain)->vpic[0].int_output ) + if ( !is_lapic && + platform_legacy_irq(irq) && vlapic_accept_pic_intr(v) && + (&v->domain->arch.hvm_domain)->vpic[irq >> 3].int_output ) return -1; else return pt_irq_vector(earliest_pt, hvm_intsrc_lapic);